--[[
    @desc 数组
    @author zch
    @data:2022-04-19 10:32:00
]]

local Array = Array or BaseClass()
local table_insert = table.insert
local table_remove = table.remove

function Array:__init()
	self.size = 0
	self.items = {}
end

function Array:IsEmpty()
	return self.size <= 0
end

--数组尾部加入数据
function Array:PushBack(item)
	self.size = self.size + 1
	self.items[self.size] = item
end

--数组尾部移除一项并返回
function Array:PopBack()
	if self.size > 0 then
		local item =self.items[self.size]
		self.items[self.size] = nil
		self.size = self.size - 1
		return item
	end
	return nil
end

--数组头部加入数据
function Array:PushFront(item)
	table_insert(self.items, 1, item)
	self.size = self.size + 1
end

--数组头部移除一项并返回
function Array:PopFront()
	if self.size > 0 then
		local item = self.items[1]
		table_remove(self.items, 1)
		self.size = self.size - 1
		return item
	end
	return nil
end

--获得索引处的值
function Array:GetElement(index)
	if index < self.size then
		return self.items[index]
	else
		print("try to index a nil value")
	end
end

function Array:Contains(item)
	for i = 1, self.size do
		local _item = self.items[i]
		if item == _item then return true end
	end
	return false
end

function Array:GetSize()
	return self.size
end

-- 移除索引的一项
function Array:Earse(index)
	index = index or self.size - 1
	if index >= 0 and index < self.size then
		table_remove(self.items, index + 1)
		self.size = self.size -1
	end
end

-- 索引处插入一项
function Array:Insert(index, item)
	index = index or 0
	table_insert(self.items, index + 1)
	self.size = self.size + 1
end

return Array